// 定义关于频道的API调用函数
import request from '@/utils/request'
import store from '@/store'
const KEY = 'geek-cilent-mobile-channels'

// 获取所有频道
export const getAllChannel = () => {
  return request({ url: '/v1_0/channels' })
}

// 1.获取token数据
// 2.如果没有登录,获取本地频道
// 2.1 如果获取到了 直接返回数据
// 2.2 如果没有获取到,调用接口,存数据,返回数据
// 3.如果没有登录,调用接口,存数据,返回数据
// 获取我的频道
export const getMyChannel = async () => {
  // return request({url: '/v1_0/user/channels'})
  // 如果没有登录
  if (!store.state.user.token) {
    const localDate = JSON.parse(localStorage.getItem(KEY) || '[]')
    if (localDate.length) {
      // 获取到,直接返回数据
      return localDate
    } else {
      // 没有获取到,发送请求
      const [, res] = await request({ url: '/v1_0/user/channels' })
      // 保存数据
      localStorage.setItem(KEY, JSON.stringify(res.data.data.channels))
      // 返回数据
      return res.data.data.channels
    }
  } else {
    // 如果登录了
    // 发送请求
    const [, res] = await request({ url: '/v1_0/user/channels' })
    // 返回数据
    return res.data.data.channels
  }
}

// 添加频道
// 判断是否登陆,没有登录的,先获取本地token,添加,存数据
// 登陆过直接发送请求
export const addChannel = async (newChannels) => {
  if (!store.state.user.token) {
    // 未登录
    // 拿本地存储的数据
    const localData = JSON.parse(localStorage.getItem(KEY) || '[]')
    const { id, name } = newChannels[newChannels.length - 1]
    // 添加数据
    localData.push({ id, name })
    // 保存数据
    localStorage.setItem(KEY, JSON.stringify(localData))
  } else {
    // 已登陆
    await request({
      url: '/v1_0/user/channels',
      method: 'PUT',
      data: { channels: newChannels }
    })
  }
}

// 删除频道
export const delChannel = async (channelId) => {
  if (!store.state.user.token) {
    // 未登录
    // 获取到本地频道
    const localDate = JSON.parse(localStorage.getItem(KEY) || '[]')
    // 获取频道对应的索引
    const index = localDate.findIndex(item => item.id === channelId)
    // 删除频道
    localDate.splice(index, 1)
    // 更新频道
    localStorage.setItem(KEY, JSON.stringify(localDate))
  } else {
    // 登陆发送删除请求
    await request({
      url: '/v1_0/user/channels/' + channelId,
      method: 'DELETE'
    })
  }
}
